package com.jinyi.base.network

import com.jinyi.base.utils.log.HHLog
import com.jinyi.base.utils.log.JsonFormat
import com.jinyi.lib_http.OkGo
import com.jinyi.lib_http.cache.CacheMode
import com.jinyi.lib_http.callback.StringCallback
import com.jinyi.lib_http.model.HttpParams
import com.jinyi.lib_http.model.Response
import com.test.testapifull.AESCryptUtil
import org.json.JSONObject
import java.io.File

/**
 * JinYiTest
 * @Author wwdeng
 * @CreateTime: 2024/4/15 10:14
 * @Annotation：网络工具类
 */
object NetworkUtils {

    /**
     * Get 请求
     * url：请求地址
     * params：请求参数
     * iCallback：回调接口
     */
    fun get(url: String, params: HttpParams?, iCallback: IRequestCallback){
        OkGo.get<String>(url) // 请求方式和请求url
            .tag(this) // 请求的 tag, 主要用于取消对应的请求
            .cacheKey("cacheKey") // 设置当前请求的缓存key,建议每个不同功能的请求设置一个
            .cacheMode(CacheMode.NO_CACHE) // 缓存模式，详细请看缓存介绍
            .params(params)
            //  .cacheTime(3000)//缓存时间
            .execute(object : StringCallback() {
                override fun onSuccess(response: Response<String>) {
                    iCallback.onRequestSuccess(JSONObject(response.body()))
                }

                override fun onError(response: Response<String>) {
                    iCallback.onRequestError(JSONObject(response.body()))
                }

                override fun onFinish() {
                    iCallback.onRequestFinish()
                }
            })
    }

    /**
     * Post 请求
     * url：请求地址
     * params：请求参数
     * iCallback：回调接口
     */
    fun post(url: String,params: HttpParams?,iCallback: IRequestCallback){
        OkGo.post<String>(url) // 请求方式和请求url
            .tag(this) // 请求的 tag, 主要用于取消对应的请求
            .cacheKey("cacheKey") // 设置当前请求的缓存key,建议每个不同功能的请求设置一个
            .cacheMode(CacheMode.NO_CACHE) // 缓存模式，详细请看缓存介绍
            .params(params)
            //  .cacheTime(3000)//缓存时间
            .execute(object : StringCallback() {
                override fun onSuccess(response: Response<String>) {
                    iCallback.onRequestSuccess(JSONObject(response.body()))
                }

                override fun onError(response: Response<String>) {
                    iCallback.onRequestError(JSONObject(response.body()))
                }

                override fun onFinish() {
                    iCallback.onRequestFinish()
                }
            })
    }

    /**
     * Post 请求
     * url：请求地址
     * params：请求参数(JSONObject)
     * iCallback：回调接口
     */
    fun post(url: String,params: JSONObject,iCallback: IRequestCallback){
        OkGo.post<String>(url) // 请求方式和请求url
            .tag(this) // 请求的 tag, 主要用于取消对应的请求
            .cacheKey("cacheKey") // 设置当前请求的缓存key,建议每个不同功能的请求设置一个
            .cacheMode(CacheMode.NO_CACHE) // 缓存模式，详细请看缓存介绍
            .upString(AESCryptUtil.encryptDefault(params.toString()))
            //  .cacheTime(3000)//缓存时间
            .execute(object : StringCallback() {
                override fun onSuccess(response: Response<String>) {
                    val body = response.body()
                    if (response.code() != 200 || body == null || body.isEmpty()){
                        val errorObj = JSONObject()
                        errorObj.put("errorCode",response.code())
                        errorObj.put("errorMsg",response.message())
                        iCallback.onRequestError(errorObj)
                        return
                    }

                    val result = AESCryptUtil.decryptDefault(body)
                    Thread { HHLog.i(JsonFormat.format(result)) }.start()
                    iCallback.onRequestSuccess(JSONObject(result))
                }

                override fun onError(response: Response<String>) {
                    val errorObj = JSONObject()
                    errorObj.put("errorCode",response.code())
                    errorObj.put("errorMsg",response.message())
                    iCallback.onRequestError(errorObj)
                }

                override fun onFinish() {
                    iCallback.onRequestFinish()
                }
            })
    }

    /**
     * 文件上传
     */
    fun uploadFile(url: String,filePath: String,callback: StringCallback){
        if (filePath.isEmpty()){
            return
        }
        //拼接参数
        OkGo.post<String>(url) //
            .tag(this) //
            .params("image",File(filePath))   //这种方式为一个key，对应一个文件
            .isMultipart(true)
            .execute(callback)
    }

    /* 取消请求 */
    fun onCancelRequest() {
        //根据 Tag 取消请求
        OkGo.getInstance().cancelTag(this)
    }
}